package top.xia17.plugins.fast.common.database.mybatis.query;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 查询注解
 * 标记@IQuery注解的字段的值为 NULL 或者 空字符串时 不生成查询条件
 * isNull , notNull , 排序 不生成只需将字段值设置为 NUll
 * @author Zheng Jie
 * @date 2019-6-4 13:52:30
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IQuery {


    /**
     * 数据库表中的字段名
     * @return /
     */
    String column() default "";

    /**
     * 查询方式
     * @return /
     */
    Type type() default Type.EQ;


    /**
     * 多字段查询，字段之间使用,号连接，
     * 多字段中的查询条件使用or相连
     * 比如 columns = 'username,nickname' ，type = Type.EQ 则生成的语句为（username like '%1%' or nickname like '%1%'）
     */
    String columns() default "";

    /** 排序时的序号 */
    int sort() default 0;

    enum Type {
        // jie 2019/6/4 相等
        EQ
        // 不等于
        , NE
        // 大于
        , GT
        // 大于等于
        , GE
        // 小于
        , LT
        // 小于等于
        , LE
        // 中模糊查询
        , INNER_LIKE
        // 左模糊查询
        , LEFT_LIKE
        // 右模糊查询
        , RIGHT_LIKE
        // jie 2019/6/4 包含
        , IN
        // 不包含
        , NOT_IN
        // between
        ,BETWEEN
        // not between
        ,NOT_BETWEEN
        // 不为空
        ,NOT_NULL
        // 为空
        ,IS_NULL
        // 排序，为该类型时字段定义应该为boolean , true 正序 ，false 倒序
        ,ORDER
        // 正序，为该类型时字段定义应该为boolean ，true 查询时加入该条件 false 不加入
        ,ASC
        // 倒序，为该类型时字段定义应该为boolean ，true 查询时加入该条件 false 不加入
        ,DESC
    }


}

